import base64

import ddddocr
import requests


def recognize_captcha(image_path):
    """
    使用ddddocr识别给定路径的图片验证码。

    :param image_path: 验证码图片文件路径
    :return: 识别出的文字
    """
    # 创建ddddocr的实例
    ocr = ddddocr.DdddOcr()

    # 打开并读取图片数据
    with open(image_path, 'rb') as img:
        img_bytes = img.read()

    # 进行验证码识别
    captcha_text = ocr.classification(img_bytes)

    return captcha_text


def recognize_captcha_base64(image_base64):
    """
    使用ddddocr识别给定base64编码的图片验证码。

    :param image_base64: 验证码图片的base64编码字符串
    :return: 识别出的文字
    """
    # 创建ddddocr的实例
    ocr = ddddocr.DdddOcr()

    try:
        # 去掉base64字符串的前缀
        if image_base64.startswith("data:image/png;base64,"):
            image_base64 = image_base64.split(",")[1]
        
        # 解码base64字符串为图片数据
        img_bytes = base64.b64decode(image_base64)
        
        # 调试信息：打印解码后的图片数据长度
        print(f"解码后的图片数据长度: {len(img_bytes)} bytes")
        
        # 进行验证码识别
        captcha_text = ocr.classification(img_bytes)
        return captcha_text
    except Exception as e:
        # 捕获异常并打印错误信息
        print(f"识别验证码时发生错误: {e}")
        raise


def recognize_captcha_url(image_url_or_base64, is_base64=False):
    """
    从给定的URL或base64编码的图片数据下载验证码图片，并使用ddddocr识别验证码。

    :param image_url_or_base64: 验证码图片的URL或base64编码字符串
    :param is_base64: 如果为True，则image_url_or_base64为base64编码字符串；否则为URL
    :return: 识别出的文字
    """
    # 创建ddddocr的实例
    ocr = ddddocr.DdddOcr()

    if is_base64:
        # 解码base64字符串为图片数据
        img_bytes = base64.b64decode(image_url_or_base64)
    else:
        # 下载图片数据
        response = requests.get(image_url_or_base64)
        if response.status_code != 200:
            raise Exception(f"无法下载图片, 状态码: {response.status_code}")
        img_bytes = response.content

    # 进行验证码识别
    captcha_text = ocr.classification(img_bytes)

    return captcha_text

# 示例调用
if __name__ == "__main__":
    # captcha_image_path = "coptcha/coptcha.png"  # 替换为你的验证码图片路径
    # recognized_text = recognize_captcha(captcha_image_path)
    # captcha_image_path = "blob:https://wx1.ha.189.cn/3c3f90c4-60ee-4832-a1b3-ddcea16ab1f7"  # 替换为你的验证码图片路径

    #  recognized_text = recognize_captcha_url(captcha_image_path)
    #  print(f"识别出的文字为: {recognized_text}")

    # 示例调用base64图片识别
    base64_image = ""
    recognized_text_base64 = recognize_captcha_base64(base64_image)
    print(f"识别出的文字为: {recognized_text_base64}")

